/*
6-10 学生成绩的统计
分数 18
作者 TracyLi
单位 成都信息工程大学

有N名学生，每个学生的数据包括学号、姓名、数学成绩、语文成绩，从键盘输入N名学生的数据，并计算出每个学生的平均成绩，最后显示最高平均分的学生的信息，包括学号，姓名，两门课的成绩，平均分数（保留小数点后一位）。需要完成两个函数；
函数接口定义：

void InputData(STU *p,int num);

STU *FindMaxIndex(STU *p,int num);

*/

#include <stdio.h>
#define N 5
typedef struct {
    int id;
    char name[20];
    int math;
    int chinese;
    double aver;
} STU;

void InputData(STU *p, int num);
STU *FindMaxIndex(STU *p, int num);

int main(void) {
    STU classone[N];
    STU *pmax;
    InputData(classone, N);
    pmax = FindMaxIndex(classone, N);
    printf("maxinfo:%d %s %d %d %.1f\n", pmax->id, pmax->name, pmax->math,
           pmax->chinese, pmax->aver);
    return 0;
}

/* 请在这里填写答案 */

/*
知识点：结构体，结构体数组，指针，函数
结构体数组作为函数参数，传递的是结构体数组的首地址，函数中可以通过数组名访问结构体数组元素。

计算平均分数时，需要注意数据类型的转换，避免整数除法的问题。
*/

void InputData(STU *p, int num) {
    for (int i = 0; i < num; i++) {
        scanf("%d %s %d %d", &p[i].id, p[i].name, &p[i].math, &p[i].chinese);
        p[i].aver = (p[i].math + p[i].chinese) / 2.0;
    }
}

// void InputData(STU *p, int num) {
//     for (int i = 0; i < num; i++) {
//         scanf("%d %s %d %d", &p->id, p->name, &p->math, &p->chinese);
//         p->aver = (p->math + p->chinese) / 2.0;
//         p++;
//     }
// }

STU *FindMaxIndex(STU *p, int num) {
    STU *pmax = &p[0];
    for (int i = 1; i < num; i++) {
        if (p[i].aver > pmax->aver) {
            pmax = &p[i]; // pmax指向平均分更高的学生 
            // pmax = p + i; // 第 i 个学生的地址
        }
    }
    return pmax;
}
